/**
*  \file cdt.h
*
*  \brief Count Down Timer
*
*  \author Michael J. Hohmann  michael.hohmann@linde-mh.de
*
*  \date  2017-05-25
*
*  Count down timer.
*  Decrement counter variable and return TRUE once if the transition to zero happens.
*  If counter is already zero, it will not be decremented and the function returns FALSE.
*  The functions are equivalent to
*
BO cdt( TYPEX *timer)
{
	if( *timer )
	{
		(*timer)--;
		if( *timer )
		{
			return FALSE;
		}
		else
		{
			return TRUE;
		}
	}
	return FALSE;
}

BO cdtx( TYPEX *timer, TYPEX value)
{
	if( *timer )
	{
		if( *timer>value)
		{
			(*timer)-=value;
			return FALSE;
		}
		else
		{
			(*timer)=0;
			if( *timer )
			{
				return FALSE;
			}
			else
			{
				return TRUE;
			}
		}
	}
	return FALSE;
}


usage:

if ( cdt_u32( &timeout) )
{

}
*
*
*
*/
#ifndef CDT_H_INCLUDED
#define CDT_H_INCLUDED


/*================================================[ public includes  ]================================================*/
#include "../cfg/prj.h"

/*================================================[ public defines   ]================================================*/

#define CDT( pvar )	 		( (*(pvar)) ? (!(--(*(pvar)))) : 0 )

#define CDTX( pvar, val)	( (*(pvar)) ? ((*(pvar))>(val)) ? (((*(pvar))-=(val)),FALSE) : ( ((*(pvar))=0),TRUE ) : FALSE )




/*================================================[ public datatypes ]================================================*/



/*================================================[ public variables ]================================================*/

/*================================================[ inline functions ]================================================*/
STATIC_INLINE BO cdt_u8 ( U8  *timer )				{ return CDT( timer );	}
STATIC_INLINE BO cdt_u16( U16 *timer )				{ return CDT( timer );	}
STATIC_INLINE BO cdt_u32( U32 *timer )				{ return CDT( timer );	}

STATIC_INLINE BO cdtx_u8 ( U8  *timer, U8  value )  { return CDTX( timer, value ); }
STATIC_INLINE BO cdtx_u16( U16 *timer, U16 value ) 	{ return CDTX( timer, value ); }
STATIC_INLINE BO cdtx_u32( U32 *timer, U32 value )	{ return CDTX( timer, value ); }





/*================================================[ public functions ]================================================*/

/*====================================================================================================================*/

#endif

/***********************************************************************************************************************
*                             Copyright 2017 Linde Material Handling. All rights reserved.                             *
***********************************************************************************************************************/
